const cors = require('cors');
const config = require('../config');

/**
 * CORS中间件配置
 * 处理跨域资源共享请求
 */

// CORS配置选项
const corsOptions = {
  // 允许的源
  origin: (origin, callback) => {
    // 开发环境允许所有来源，生产环境只允许配置的来源
    if (config.app.environment === 'development') {
      callback(null, true);
      return;
    }
    
    if (config.app.allowedOrigins.includes(origin) || !origin) {
      callback(null, true);
    } else {
      callback(new Error('不允许的跨域请求'));
    }
  },
  
  // 允许的请求方法
  methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
  
  // 允许的请求头
  allowedHeaders: [
    'Origin',
    'X-Requested-With',
    'Content-Type',
    'Accept',
    'Authorization',
    'X-CSRF-Token',
    'Cache-Control',
    'Pragma'
  ],
  
  // 允许客户端访问的响应头
  exposedHeaders: [
    'Content-Length',
    'Content-Type',
    'Authorization',
    'X-Request-Id'
  ],
  
  // 允许凭证（cookies、HTTP认证）
  credentials: true,
  
  // 预检请求的缓存时间（秒）
  maxAge: 86400, // 24小时
  
  // 处理预检请求
  optionsSuccessStatus: 200
};

/**
 * 创建CORS中间件
 * @returns {Function} CORS中间件函数
 */
function createCorsMiddleware() {
  return cors(corsOptions);
}

/**
 * 特定路由的CORS配置
 * @param {Array} allowedOrigins 允许的源列表
 * @returns {Function} 自定义CORS中间件
 */
function createCustomCorsMiddleware(allowedOrigins) {
  return cors({
    ...corsOptions,
    origin: allowedOrigins
  });
}

module.exports = {
  createCorsMiddleware,
  createCustomCorsMiddleware,
  corsOptions,
  // 导出默认的CORS中间件函数
  default: createCorsMiddleware()
};